{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-26T06:14:46.350753Z",
     "start_time": "2025-06-26T06:14:46.346738Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['c:\\\\Program Files\\\\Python312\\\\python312.zip', 'c:\\\\Program Files\\\\Python312\\\\DLLs', 'c:\\\\Program Files\\\\Python312\\\\Lib', 'c:\\\\Program Files\\\\Python312', '', 'C:\\\\Users\\\\41507\\\\AppData\\\\Roaming\\\\Python\\\\Python312\\\\site-packages', 'C:\\\\Users\\\\41507\\\\AppData\\\\Roaming\\\\Python\\\\Python312\\\\site-packages\\\\win32', 'C:\\\\Users\\\\41507\\\\AppData\\\\Roaming\\\\Python\\\\Python312\\\\site-packages\\\\win32\\\\lib', 'C:\\\\Users\\\\41507\\\\AppData\\\\Roaming\\\\Python\\\\Python312\\\\site-packages\\\\Pythonwin', 'c:\\\\Program Files\\\\Python312\\\\Lib\\\\site-packages']\n"
     ]
    }
   ],
   "source": [
    "import sys\n",
    "print(sys.path)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-26T06:14:48.340332Z",
     "start_time": "2025-06-26T06:14:46.350753Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.datasets import fetch_california_housing\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "from tqdm.auto import tqdm\n",
    "from torch.utils.data import DataLoader, Dataset\n",
    "from deeplearning_func import EarlyStopping, ModelSaver\n",
    "from deeplearning_func import plot_learning_loss_curves,train_regression_model\n",
    "import os"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-26T06:14:48.358208Z",
     "start_time": "2025-06-26T06:14:48.340332Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集大小: 13209\n",
      "验证集大小: 3303\n",
      "测试集大小: 4128\n"
     ]
    }
   ],
   "source": [
    "\n",
    "\n",
    "# 加载加利福尼亚房价数据集\n",
    "housing = fetch_california_housing()\n",
    "X = housing.data\n",
    "y = housing.target\n",
    "\n",
    "# 数据拆分：训练集(60%)、验证集(20%)、测试集(20%)\n",
    "X_train_val, X_test, y_train_val, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
    "X_train, X_val, y_train, y_val = train_test_split(X_train_val, y_train_val, test_size=0.2, random_state=42)  # 0.25 x 0.8 = 0.2\n",
    "\n",
    "print(f\"训练集大小: {X_train.shape[0]}\")\n",
    "print(f\"验证集大小: {X_val.shape[0]}\")\n",
    "print(f\"测试集大小: {X_test.shape[0]}\")\n",
    "\n",
    "# 数据标准化\n",
    "scaler = StandardScaler()\n",
    "X_train_scaled = scaler.fit_transform(X_train)\n",
    "X_val_scaled = scaler.transform(X_val)\n",
    "X_test_scaled = scaler.transform(X_test)\n",
    "\n",
    "# 自定义数据集类\n",
    "class HousingDataset(Dataset):\n",
    "    def __init__(self, features, targets):\n",
    "        self.features = torch.FloatTensor(features)\n",
    "        self.targets = torch.FloatTensor(targets).view(-1, 1)\n",
    "        \n",
    "    def __len__(self):\n",
    "        return len(self.features) #返回样本数量\n",
    "    \n",
    "    def __getitem__(self, idx): #传入索引，返回对应索引样本的特征和目标\n",
    "        return self.features[idx], self.targets[idx]\n",
    "\n",
    "# 创建数据集实例\n",
    "train_dataset = HousingDataset(X_train_scaled, y_train)\n",
    "val_dataset = HousingDataset(X_val_scaled, y_val)\n",
    "test_dataset = HousingDataset(X_test_scaled, y_test)\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 加载数据，构建模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-26T06:14:49.085821Z",
     "start_time": "2025-06-26T06:14:48.358208Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RegressionModel(\n",
      "  (layer1): Linear(in_features=8, out_features=30, bias=True)\n",
      "  (activation): ReLU()\n",
      "  (output): Linear(in_features=30, out_features=1, bias=True)\n",
      ")\n"
     ]
    }
   ],
   "source": [
    "from torch import optim\n",
    "\n",
    "# 创建数据加载器\n",
    "train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)\n",
    "val_loader = DataLoader(val_dataset, batch_size=32)\n",
    "test_loader = DataLoader(test_dataset, batch_size=32)\n",
    "\n",
    "# 定义神经网络模型\n",
    "class RegressionModel(nn.Module):\n",
    "    def __init__(self, input_dim):\n",
    "        super(RegressionModel, self).__init__()\n",
    "        self.layer1 = nn.Linear(input_dim, 30)\n",
    "        self.activation = nn.ReLU()\n",
    "        self.output = nn.Linear(30, 1)\n",
    "        \n",
    "    def forward(self, x):\n",
    "        x = self.activation(self.layer1(x))\n",
    "        x = self.output(x)\n",
    "        return x\n",
    "\n",
    "# 初始化模型、损失函数和优化器\n",
    "input_dim = X_train.shape[1]\n",
    "model = RegressionModel(input_dim)\n",
    "criterion = nn.MSELoss()\n",
    "optimizer = optim.Adam(model.parameters())\n",
    "\n",
    "# 打印模型结构\n",
    "print(model)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-26T06:14:49.089336Z",
     "start_time": "2025-06-26T06:14:49.086826Z"
    }
   },
   "outputs": [],
   "source": [
    "# 评估模型\n",
    "def evaluate_regression_model(model, dataloader,  device,criterion):\n",
    "    model.eval()\n",
    "    running_loss = 0.0\n",
    "\n",
    "    \n",
    "    with torch.no_grad():#禁止 autograd 记录计算图，节省显存与算力。\n",
    "        for inputs, targets in dataloader:\n",
    "            inputs, targets = inputs.to(device), targets.to(device)\n",
    "            outputs = model(inputs) #前向计算\n",
    "            loss = criterion(outputs, targets) #计算损失\n",
    "            \n",
    "            running_loss += loss.item() * inputs.size(0)\n",
    "    \n",
    "    return running_loss / len(dataloader.dataset)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-26T06:15:20.191876Z",
     "start_time": "2025-06-26T06:14:49.089839Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "开始网格搜索最佳学习率...\n",
      "\n",
      "尝试学习率: 0.01\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "00c60af228044bf8aa8bc7eed7766dec",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "train progress:   0%|          | 0/41300 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "早停触发! 最佳验证准确率(如果是回归，这里是损失): -0.3212\n",
      "早停: 已有10轮验证损失没有改善！\n",
      "学习率 0.01 的验证损失: 0.3235\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1000x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "尝试学习率: 0.03\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "ebb0e632c2f34484a468ffd817c982b9",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "train progress:   0%|          | 0/41300 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "早停触发! 最佳验证准确率(如果是回归，这里是损失): -0.3212\n",
      "早停: 已有10轮验证损失没有改善！\n",
      "学习率 0.03 的验证损失: 0.4760\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0EAAAHWCAYAAACxAYILAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAKY5JREFUeJzt3QeU1dWdwPHfCENTEAG7KMbeu3sU11goFuwtxtgSde1RVte4MSo2jBtd11ijUaOJSoKCHitYUCyo2GONBhVbAI0MglLfnnt3Zw4g4IDAG7ifzzkvw7z3mHcf48l533PLv6ZSqVQCAACgEEtUewAAAAALkwgCAACKIoIAAICiiCAAAKAoIggAACiKCAIAAIoiggAAgKKIIAAAoCgiCAAAKIoIAmAGN998c9TU1MT7779f7aEAwAIhggAAgKKIIAAAoCgiCAAiYvz48dUeAgALiQgCoFGuvvrq2GCDDaJly5ax0korxQknnBBffvnlDM/529/+Fvvtt1+ssMIK0apVq1hllVXiRz/6UYwdO7bhOYMHD47tttsu2rdvH0sttVSss8468Z//+Z+NGsMf//jH2HrrraNNmzaxzDLLxPbbbx+DBg1qeDztZTr33HO/9fe6dOkSRxxxxLf2PT3++ONx/PHHx3LLLZfH2r9//4b7Z3bdddflx/7617823PfWW2/F/vvvHx06dMjvd8stt4x77rlnhr83efLk6NOnT6y11lr5OR07dszvP/07AFAdzav0ugAsQlJYpA/y3bp1i+OOOy7efvvtuOaaa+L555+Pp556Kmpra2PSpEnRs2fPmDhxYpx00kk5hD7++OO49957cywtvfTS8frrr0evXr1i4403jvPOOy8H1bvvvpt/xndJr5/Gse222+a/26JFi3j22Wfj0UcfjR49eszT+0oBtOyyy8bZZ5+dZ4J23333HGZ//vOf44c//OEMz+3Xr1+OwA033DB/n95L165dY+WVV45f/OIXseSSS+a/t/fee8edd94Z++yzT8O/Xd++feOoo47KAVdXVxfDhw+PF198Mbp37z5P4wbg+xFBAMzR6NGj84f4FBoPPPBALLHE/y0iWHfddePEE0/MszNHHnlkvPHGGzFixIj4y1/+kmdH6qXAqJdmP1IspZ/TqVOnRo8hhVIKnxQWabamfgxJpVKZ5/eWZnAeeeSRaNasWcN9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UwDVX3cIAACgSUTQlVdeGccff3w+yCBd12fllVfO9z/wwAOxyy67NPrn/P73v5+XlwcAAFi4EZSWr917773fuv+///u/530kAAAATTWC6i9uOnDgwHjzzTfz9xtssEHsueee0axZs/k5PgAAgOpH0LvvvptPgfv4449jnXXWyff17ds3X7Pnvvvuy0dcAwAANEVLzMtfOvnkk3PojBw5Mh+LnW7pgqerr756fgwAAGCxmgl6/PHHY9iwYflI7HodO3aMiy++OJ8YBwAAsFjNBLVs2TJf12dmX331Vb6GEAAAwGIVQb169Ypjjjkmnn322ahUKvmWZoaOPfbYfDgCAADAYhVBV1xxRd4TtM0220SrVq3ybdttt40111wzLr/88vk/SgAAgGruCWrfvn3cfffd+ZS4+iOy11tvvRxBAAAAi0UE9e7de46PP/bYYw1/vuyyy77fqAAAAKodQS+99FKjnldTU/N9xgMAANA0Imj6mR4AAICiDkYAAABYVIkgAACgKCIIAAAoiggCAACKIoIAAICiiCAAAKAoIggAACiKCAIAAIoiggAAgKKIIAAAoCgiCAAAKIoIAgAAiiKCAACAooggAACgKCIIAAAoiggCAACKIoIAAICiiCAAAKAoIggAACiKCAIAAIoiggAAgKKIIAAAoCgiCAAAKIoIAgAAiiKCAACAooggAACgKCIIAAAoiggCAACKIoIAAICiiCAAAKAoIggAACiKCAIAAIoiggAAgKKIIAAAoCgiCAAAKIoIAgAAiiKCAACAooggAACgKCIIAAAoiggCAACKIoIAAICiiCAAAKAoIggAACiKCAIAAIoiggAAgKKIIAAAoCgiCAAAKIoIAgAAilLVCOrbt29stdVW0bZt21huueVi7733jrfffruaQwIAABZzVY2gxx9/PE444YQYNmxYDB48OCZPnhw9evSI8ePHV3NYAADAYqx5NV/8wQcfnOH7m2++Oc8IvfDCC7H99ttXbVwAAMDiq6oRNLOxY8fmrx06dJjl4xMnTsy3enV1dflrmkFKt2qpf+1qjgEAAEo2eS4+izeZCJo2bVqccsop0bVr19hwww1nu4eoT58+37p/0KBB0aZNm6i2tKQPAABY+CZMmNDo59ZUKpVKNAHHHXdcPPDAA/Hkk0/GKqus0uiZoM6dO8eYMWOiXbt2Uc3qTAHUvXv3qK2trdo4AACgVHV1ddGpU6e8uuy72qBJzASdeOKJce+998YTTzwx2wBKWrZsmW8zS+HRFOKjqYwDAABKUzsXn8OrGkFpEuqkk06KAQMGxJAhQ2L11Vev5nAAAIACVDWC0vHYt912W9x99935WkGfffZZvn/ppZeO1q1bV3NoAADAYqqq1wm65ppr8pq9HXbYIVZcccWGW79+/ao5LAAAYDFW9eVwAAAAxcwEAQAALGwiCAAAKIoIAgAAiiKCAACAooggAACgKCIIAAAoiggCAACKIoIAAICiiCAAAKAoIggAACiKCAIAAIoiggAAgKKIIAAAoCgiCAAAKIoIAgAAiiKCAACAooggAACgKCIIAAAoiggCAACKIoIAAICiiCAAAKAoIggAACiKCAIAAIoiggAAgKKIIAAAoCgiCAAAKIoIAgAAiiKCAACAooggAACgKCIIAAAoiggCAACKIoIAAICiiCAAAKAoIggAACiKCAIAAIoiggAAgKKIIAAAoCgiCAAAKIoIAgAAiiKCAACAooggAACgKCIIAAAoiggCAACKIoIAAICiiCAAAKAoIggAACiKCAIAAIoiggAAgKKIIAAAoCgiCAAAKIoIAgAAiiKCAACAooggAACgKCIIAAAoiggCAACKIoIAAICiiCAAAKAoIggAACiKCAIAAIpS1Qh64oknYo899oiVVlopampqYuDAgdUcDgAAUICqRtD48eNjk002iauuuqqawwAAAArSvJovvuuuu+YbAABAERE0tyZOnJhv9erq6vLXyZMn51u11L92NccAAAAlmzwXn8UXqQjq27dv9OnT51v3Dxo0KNq0aRPVNnjw4GoPAQAAijRhwoRGP7emUqlUoglIByMMGDAg9t5777maCercuXOMGTMm2rVrF9WszhRA3bt3j9ra2qqNAwAASlVXVxedOnWKsWPHfmcbLFIzQS1btsy3maXwaArx0VTGAQAApamdi8/hrhMEAAAUpaozQV999VW8++67Dd+PGDEiXn755ejQoUOsuuqq1RwaAACwmKpqBA0fPjx23HHHhu979+6dvx5++OFx8803V3FkAADA4qqqEbTDDjtEEzmXAQAAKIQ9QQAAQFFEEAAAUBQRBAAAFEUEAQAARRFBAABAUUQQAABQFBEEAAAURQQBAABFEUEAAEBRRBAAAFAUEQQAABRFBAEAAEURQQAAQFFEEAAAUBQRBAAAFEUEAQAARRFBAABAUUQQAABQFBEEAAAURQQBAABFEUEAAEBRRBAAAFAUEQQAABRFBAEAAEURQQAAQFFEEAAAUBQRBAAAFEUEAQAARRFBAABAUUQQAABQFBEEAAAURQQBAABFEUEAAEBRRBAAAFAUEQQAABRFBAEAAEURQQAAQFFEEAAAUBQRBAAAFEUEAQAARRFBAABAUUQQAABQFBEEAAAURQQBAABFEUEAAEBRRBAAAFAUEQQAABSleSzCKpVK/lpXV1fVcUyePDkmTJiQx1FbW1vVsQAAQInq/r8J6hthsY2gcePG5a+dO3eu9lAAAIAm0ghLL730HJ9TU2lMKjVR06ZNi08++STatm0bNTU1Va3OFGIjR46Mdu3aVW0cAABQqkqlkgNopZVWiiWWWGLxjaCmIkVQqs2xY8eKIAAAaOIcjAAAABRFBAEAAEURQfNBy5Yt45xzzslfAQCAps2eIAAAoChmggAAgKKIIAAAoCgiCAAAKIoImo/SBVsHDhxY7WEAAABzIILm0lVXXRVdunSJVq1axb/8y7/Ec889V+0hAQAAc0EEzYV+/fpF796983HYL774YmyyySbRs2fPGDVqVLWHBgAANJIImguXXXZZHH300XHkkUfG+uuvH9dee220adMmbrzxxlk+P8XSiiuuGK+++upCHysAADBrIqiRJk2aFC+88EJ069at4b4lllgif//MM8/M8Nx06aWTTjopbrnllhg6dGhsvPHGVRgxAAAwK81neS/fMmbMmJg6dWosv/zyM9yfvn/rrbcavp8yZUr85Cc/iZdeeimefPLJWHnllaswWgAAYHZE0Hx26qmnRsuWLWPYsGHRqVOnag8HAACYieVwjZSCplmzZvGPf/xjhvvT9yussELD9927d4+PP/44HnrooSqMEgAA+C4iqJFatGgRW2yxRTzyyCMN902bNi1/v8022zTct+eee8Ztt90WRx11VNxxxx1VGi0AADA7lsPNhXQ89uGHHx5bbrllbL311nH55ZfH+PHj82lx09tnn33i1ltvjUMPPTSaN28e+++/f9XGDAAAzEgEzYWDDjooRo8eHWeffXZ89tlnsemmm8aDDz74rcMSkhQ+aaYohVA6RW7fffetypgBAIAZ1VTSec4AAACFsCcIAAAoiggCAACKIoIAAICiiCAAAKAoIggAACiKCAIAAIoiggAAgKKIIAAAoCgiCAAAKIoIAmCRcMQRR8Tee+9d7WEAsBgQQQAAQFFEEABNSv/+/WOjjTaK1q1bR8eOHaNbt25x+umnxx/+8Ie4++67o6amJt+GDBmSnz9y5Mg48MADo3379tGhQ4fYa6+94v333//WDFKfPn1i2WWXjXbt2sWxxx4bkyZNquK7BKCamlf11QFgOp9++mkcfPDBcckll8Q+++wT48aNi6FDh8Zhhx0WH374YdTV1cVNN92Un5uCZ/LkydGzZ8/YZptt8vOaN28eF1xwQeyyyy7x6quvRosWLfJzH3nkkWjVqlUOpxRIRx55ZA6sCy+8sMrvGIBqEEEANKkImjJlSuy7776x2mqr5fvSrFCSZoYmTpwYK6ywQsPz//jHP8a0adPihhtuyLNDSYqkNCuUgqdHjx75vhRDN954Y7Rp0yY22GCDOO+88/Ls0vnnnx9LLGFRBEBp/D8/AE3GJptsEjvvvHMOnwMOOCCuv/76+Oc//znb57/yyivx7rvvRtu2bWOppZbKtzRD9M0338R77703w89NAVQvzRx99dVXeSkdAOUxEwRAk9GsWbMYPHhwPP300zFo0KD47W9/G7/85S/j2WefneXzU8hsscUW8ac//elbj6X9PwAwKyIIgCYlLWvr2rVrvp199tl5WdyAAQPykrapU6fO8NzNN988+vXrF8stt1w+8GBOM0Zff/11XlKXDBs2LM8ade7ceYG/HwCaHsvhAGgy0ozPRRddFMOHD88HIdx1110xevToWG+99aJLly75sIO33347xowZkw9FOOSQQ6JTp075RLh0MMKIESPyXqCTTz45Pvroo4afm06C+9nPfhZvvPFG3H///XHOOefEiSeeaD8QQKHMBAHQZKTZnCeeeCIuv/zyfBJcmgW69NJLY9ddd40tt9wyB076mpbBPfbYY7HDDjvk559xxhn5MIV0mtzKK6+c9xVNPzOUvl9rrbVi++23z4crpBPozj333Kq+VwCqp6ZSqVSq+PoAsECl6wR9+eWXMXDgwGoPBYAmwjoAAACgKCIIAAAoiuVwAABAUcwEAQAARRFBAABAUUQQAABQFBEEAAAURQQBAABFEUEAAEBRRBAAAFAUEQQAAERJ/hehyIlIQ/gUWQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 1000x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "尝试学习率: 0.3\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "bbe6bc1639114c0285705ff24022fa5d",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "train progress:   0%|          | 0/41300 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "早停触发! 最佳验证准确率(如果是回归，这里是损失): -0.3212\n",
      "早停: 已有10轮验证损失没有改善！\n",
      "学习率 0.3 的验证损失: 650621.3187\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA2wAAAHWCAYAAAALogprAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAP2BJREFUeJzt3Qm4lVW9P/DFPAiIoIADijdHFEFBFDXTZHBMRQvNFHHo0ZzJsQzFNItS0Zxu179p3UzU0lIQQcwpURQ1Z0qjxBRBYxKQcf+f37p3n3sOoBzw4H6Fz+d5dvvs/a7zvmufw9Nzvv7W+r31SqVSKQEAAFA49Ss9AQAAAFZMYAMAACgogQ0AAKCgBDYAAICCEtgAAAAKSmADAAAoKIENAACgoAQ2AACAghLYAAAACkpgA+AL7bbbbkv16tVL//jHPyo9FQCocwIbAABAQQlsAAAABSWwAcAX0Ny5cys9BQA+BwIbAGulG2+8Me2www6pSZMmaZNNNkmnnXZamjlzZo0xf/vb39IRRxyROnTokJo2bZo222yzdNRRR6VZs2ZVjRk7dmzaa6+9UuvWrVOLFi3Stttum773ve/Vag7//d//nXr27JmaN2+eNthgg7T33nunMWPGVB2PvXeXXnrpct/XqVOndPzxxy+3T++xxx5L3/nOd1K7du3yXO+5556q95f1n//5n/nYK6+8UvXeG2+8kY488sjUpk2b/Hl79OiR/vjHP9b4vkWLFqWhQ4emrbfeOo9p27Zt/vzxcwDg89ewAtcEgDUqQlCEjt69e6dTTz01TZo0Kd10003p2WefTX/+859To0aN0sKFC1O/fv3SggUL0hlnnJFD27/+9a/0wAMP5GC3/vrrp1dffTUdfPDBaaeddkqXXXZZDn9vvvlmPsfKxPVjHnvssUf+3saNG6dnnnkmPfLII6lv376r9bkirG200UZpyJAhucJ20EEH5RB51113pa985Ss1xo4YMSIH1h133DG/js+y5557pk033TRdeOGFab311svfd9hhh6Xf/e536fDDD6/62V155ZXppJNOymFz9uzZ6bnnnkvPP/986tOnz2rNG4DVJ7ABsFaZPn16DhwRih588MFUv/7/LCbZbrvt0umnn56rXoMGDUqvvfZamjx5crr77rtz1akswlBZVJUi2MV5Ntxww1rPIUJdhLQIQVEFK88hlEql1f5sURkbN25catCgQdV7hxxySL7GddddV/X+1KlTc9WtevXurLPOSptvvnkOrRE8ywEwqmcXXHBBVWAbOXJkOvDAA9MvfvGL1Z4nAHXHkkgA1ioPP/xwDllnn312jaB08sknp1atWuVAEqKCFh566KE0b968FZ4rlkGGP/zhD2np0qW1nsN9992Xx0f4qz6HEMsUV1d8huphLQwYMCBNmzYtPfroo1XvRYCL68ex8O9//ztX9r7xjW+kOXPmpA8++CA/Pvzww1xljKWhUV0sf+aoxsV7AFSewAbAWuWf//xnfo69ZtXFksT/+I//qDq+5ZZbpsGDB6dbbrklV88iuNxwww019q9F4IllhLE8sH379nl/WywjXFl4e+utt3JQ69y5c51+tpjzsvbff/8cPmMJZFl83a1bt7TNNttUVfyisveDH/wgL6ms/rjkkkvymAh9ISqDsSQ0vrdLly7pvPPOSy+99FKdfg4Aak9gA2CdddVVV+UwEk1E5s+fn84888y87+udd97Jx5s1a5Yef/zxXLU79thj89gIcbGXa8mSJWtsXp907pjPsmJ5Y+xDu/fee9PixYtzpSz22JWra6EcMM8999y8zHNFj6222iqPicYoEThvvfXWvP8tAu0uu+ySnwH4/AlsAKxVtthii/wcjUaqi2WSsWetfLwsqkgXX3xxDmZPPPFEDjw333xz1fGolO23337p6quvzvverrjiiry88E9/+tMnzuFLX/pSDkkx/tNE58hlO1fGPN97771V+swRzmKJY+xviz15UU2rHtiishii2Uo0YlnRo2XLljX2ysU+v9/+9rdpypQpuenKirpZArDmCWwArFUifMTyx2jCUb3Bx//7f/8vL3eMzoohuh9GRWrZ8BYBLTpHlvd+LSuWGobymBWJilecJ5YXLrt8svqcIthFUKwumn2savUuPnOErFgKGY/o7lh9+WTcBmCfffbJrf5XFAajUUtZ7GurLrpQRvXt0z4vAGuOLpEArFViX9ZFF12U2+rH/q6vfe1rudoW92Xbdddd07e+9a08Lqpk0TXy61//et6vFeHt17/+dW7qEfdmCxG4IlBFyIvKXOzzivPEPdCiu+IniYDz/e9/P/3whz9MX/7yl1P//v3z0sXo0Bj3hIsuliH2xp1yyin5erHM8i9/+UtugrIqHSnLlbO4xp133pnb/f/sZz9bbkzsz4s5RyiN5iVRdXv//ffT+PHj8xLQuHaIfXcR7rp3755DYLT0jyYm8bMCoAJKAPAF9stf/jJKVqXJkyfXeP/6668vbbfddqVGjRqV2rdvXzr11FNLM2bMqDr+97//vXTCCSeUvvSlL5WaNm1aatOmTWnfffctPfzww1Vjxo0bVzr00ENLm2yySalx48b5+eijjy799a9/rdXcbr311tLOO+9catKkSWmDDTYofeUrXymNHTu26viSJUtKF1xwQWnDDTcsNW/evNSvX7/Sm2++Wdpiiy1KAwcOXO4zPvvss594rThvjKlXr15pypQpKxzz1ltvlY477rhShw4d8s9l0003LR188MGle+65p2rM5ZdfXurZs2epdevWpWbNmuWf4RVXXFFauHBhrT4zAHWrXvxPJYIiAAAAn84eNgAAgIIS2AAAAApKYAMAACgogQ0AAKCgBDYAAICCEtgAAAAKyo2zP0dLly5N7777bmrZsmWqV69epacDAABUSNxdbc6cOWmTTTZJ9et/ch1NYPscRVjr2LFjpacBAAAUxJQpU9Jmm232iccFts9RVNbKv5RWrVpVbB6LFi1KY8aMSX379k2NGjWq2DwAAGBdNXv27FzMKWeETyKwfY7KyyAjrFU6sDVv3jzPQWADAIDKWdlWKU1HAAAACkpgAwAAKCiBDQAAoKDsYStge8/FixenJUuWrNE9bA0bNkwff/zxGr3OuqpBgwb55+vWDQAAfFYCW4EsXLgwvffee2nevHlrPBR26NAhd6sUKtaMaOqy8cYbp8aNG1d6KgAAfIEJbAW6qfbkyZNzdSZunhd/6K+pMBXX+uijj1KLFi0+9SZ9rF4YjuA9ffr0/Pvceuut/YwBAFhtAltBxB/5EaTiXgxRnVmT4jpxvaZNmwoTa0CzZs3y7RL++c9/Vv2cAQBgdfhrvWAEqLWD3yMAAHXBX5UAAAAFJbABAAAUlMBGoXTq1CkNHz68Ts716KOP5sYtM2fOrJPzAQDA503TET6zffbZJ3Xr1q1Ogtazzz6b1ltvvTqZFwAAfNEJbHwure7jBt1xM+mV2WijjT6XOQEAwBeBJZEFDjnzFi5eY4/5C5d84rG4dm0df/zx6bHHHkvXXnttXn4Yj9tuuy0/P/jgg6l79+6pSZMm6cknn0xvvfVWOvTQQ1P79u3zPeB23XXX9PDDD3/qksg4zy233JIOP/zwfLuDuK/ZH//4x9X+uf7ud79LO+ywQ55TXOuqq66qcfzGG2/M14hW/DHPI488surYPffck7p06ZLb9rdt2zb17t07zZ07d7XnAgAAK6PCVlDzFy1JnYc8VJFrv3ZZv9S8ce3+aURQ++tf/5p23HHHdNlll+X3Xn311fx84YUXpp/97GfpP/7jP9IGG2yQpkyZkg488MB0xRVX5MD0q1/9Kh1yyCFp0qRJafPNN//EawwdOjQNGzYs/fSnP00///nP0zHHHJPvcdamTZtV+lwTJ05M3/jGN9Kll16aBgwYkJ566qn0ne98J4evCJ7PPfdcOvPMM9Ovf/3rtMcee6R///vf6Yknnsjf+95776Wjjz46zyPC45w5c/KxVQm3AACwqgQ2PpP1118/NW7cOFe/OnTokN9744038nMEuD59+lSNjYDVtWvXqtc//OEP07333psrZqeffvonXiPCVISl8KMf/Shdd911acKECWn//fdfpbleffXVab/99ks/+MEP8uttttkmvfbaazkIxjXefvvtvH/u4IMPTi1btkxbbLFF2nnnnasC2+LFi1P//v3z+yGqbQAAsCYJbAXVrFGDXOlaE5YuXZrmzJ6TWrZqucIbPMe160KPHj1qvP7oo49ydWvkyJFVAWj+/Pk5KH2anXbaqerrCFStWrVK06ZNW+X5vP7663lJZnV77rlnXoIZe+wiXEYYi4pghMF4lJdiRtCMsBchrV+/fqlv3755uWRUDgEAYE2xh62gYu9WLEtcU49mjRt84rG4dl1YttvjueeemytqUSWL5YQvvvhiDkALFy781PM0atRouZ9NhM66FlW1559/Pv32t79NG2+8cRoyZEgOanFbgAYNGqSxY8fmfXmdO3fOSzO33XbbNHny5DqfBwAAlAlsfGaxJDIqVCvz5z//OS89jKpVBLVYQvmPf/wjfV623377PIdl5xRLIyOQhehkGc1EYq/aSy+9lOf3yCOPVAXFqMjFnroXXnghf+4IoAAAsKZYEslnFt0Wn3nmmRxuovvjJ1W/ovvi73//+9xoJMJP7CVbE5WyT/Ld7343d6aMvXPRdGT8+PHp+uuvz50hwwMPPJD+/ve/p7333jsvdRw1alSeX1TS4vONGzcuL4Vs165dfj19+vQcAgEAYE1RYeMzi6WOUaGKpYJxH7VP2pMWTT8iCEUHxghtsRdsl112+dzmGde666670p133pm7WsaSx2iMElW/0Lp16xwov/rVr+YgdvPNN+flkXEbgNg39/jjj+cul1GRu/jii/MtAQ444IDPbf4AAKx76pX0Jf/czJ49O3dVnDVrVg4A1X388cd5P9SWW26Z7wG2JkXVKOYSc1hR0xE+u8/z9wkAwNqVDarz1zoAAEBBCWx8YZ1yyil5z9yKHnEMAAC+6DQd4Qsr9p/F/rkV+bSyMgAAfFEIbHxhRbfGeAAAwNrKkkgAAICCEtgAAAAKSmADAAAoKIENAACgoAQ2AACAghLYqLhOnTql4cOH12psvXr10n333bfG5wQAAEUgsAEAABSUwAYAAFBQAltRlUopLZy75h6L5n3ysbh2Lf3iF79Im2yySVq6dGmN9w899NB0wgknpLfeeit/3b59+9SiRYu06667pocffrjOfkwvv/xy+upXv5qaNWuW2rZtm7797W+njz76qOr4o48+mnr27JnWW2+91Lp167Tnnnumf/7zn/nYX/7yl7Tvvvumli1bplatWqXu3bun5557rs7mBgAAn1XDz3wG1owIVD/aZI2l9NafNuB776bUeL1anevrX/96OuOMM9Kf/vSntN9+++X3/v3vf6fRo0enUaNG5fB04IEHpiuuuCI1adIk/epXv0qHHHJImjRpUtp8880/0+eYO3du6tevX+rVq1d69tln07Rp09JJJ52UTj/99HTbbbelxYsXp8MOOyydfPLJ6be//W1auHBhmjBhQt4HF4455pi08847p5tuuik1aNAgvfjii6lRo0afaU4AAFCXBDY+kw022CAdcMAB6Y477qgKbPfcc0/acMMNc/Wqfv36qWvXrlXjf/jDH6Z77703/fGPf8zB6rOIa3788cc5BEYFLVx//fU5EP7kJz/J4WvWrFnp4IMPTl/60pfy8e23377q+99+++103nnnpe222y6/3nrrrT/TfAAAoK4JbEXVqPn/VLrWgFi+OHvOnNSqZcscqFZ47VUQlaqoYt144425ivab3/wmHXXUUfncUWG79NJL08iRI9N7772Xq17z58/PYemzev3113MYLIe1EEse4/NFBW/vvfdOxx9/fK7C9enTJ/Xu3Tt94xvfSBtvvHEeO3jw4FyR+/Wvf52PRbWwHOwAAKAIKr6H7V//+lf61re+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Yllk9Y6WdS3OHV0z46bO7hFW9+JnqrIGAEBdENgKKP7YX5N/8Me54151TZs2FdgAAKDAbGACAAAoKIENAACgoAQ2AACAghLYAAAACkpgAwAAKCiBDQAAoKAENgAAgIIS2AAAAApKYAMAACgogQ0AAKCgBDYAAICCEtgAAAAKSmADAAAoKIENAACgoAQ2AACAghLYAAAACkpgAwAAKCiBDQAAoKAENgAAgIIS2AAAAApKYAMAACgogQ0AAKCgBDYAAICCEtgAAAAKSmADAAAoKIENAACgoAQ2AACAghLYAAAACkpgAwAAKCiBDQAAoKAENgAAgIIS2AAAAApKYAMAACgogQ0AAKCgBDYAAICCEtgAAAAKSmADAAAoKIENAACgoCoa2C699NJUr169Go/tttuu6vjHH3+cTjvttNS2bdvUokWLdMQRR6T333+/xjnefvvtdNBBB6XmzZundu3apfPOOy8tXry4xphHH3007bLLLqlJkyZpq622Srfddttyc7nhhhtSp06dUtOmTdNuu+2WJkyYUON4beYCAACwVlXYdthhh/Tee+9VPZ588smqY+ecc066//770913350ee+yx9O6776b+/ftXHV+yZEkOawsXLkxPPfVUuv3223MYGzJkSNWYyZMn5zH77rtvevHFF9PZZ5+dTjrppPTQQw9VjRkxYkQaPHhwuuSSS9Lzzz+funbtmvr165emTZtW67kAAADUtXqlUqmUKlhhu++++3KQWtasWbPSRhttlO6444505JFH5vfeeOONtP3226fx48en3XffPT344IPp4IMPzuGpffv2eczNN9+cLrjggjR9+vTUuHHj/PXIkSPTK6+8UnXuo446Ks2cOTONHj06v46K2q677pquv/76/Hrp0qWpY8eO6YwzzkgXXnhhreZSG7Nnz07rr79+Pl+rVq1SpSxatCiNGjUqHXjggalRo0YVmwcAAKyrZtcyGzRMFfa3v/0tbbLJJnkpYq9evdKVV16ZNt988zRx4sQcLHr37l01NpZLxrFySIrnLl26VIW1EJWxU089Nb366qtp5513zmOqn6M8JiptIapzca2LLrqo6nj9+vXz98T3htrMZUUWLFiQH9V/KSHOFY9KKV+7knMAAIB12aJa/i1e0cAWla1Ywrjtttvm5ZBDhw5NX/7yl3M1bOrUqblC1rp16xrfE+EsjoV4rh7WysfLxz5tTISn+fPnpxkzZuSllSsaE1W08jlWNpcVifAZn2lZY8aMyXvuKm3s2LGVngIAAKyT5s2bV/zAdsABB1R9vdNOO+UAt8UWW6S77rorNWvWLH3RRdUu9saVRUiMpZZ9+/at+JLICGt9+vSxJBIAACqgvPpuZSq+JLK6qGBts8026c0338xhIpYrxl6z6pWt6MzYoUOH/HU8L9vNsdy5sfqYZbs5xusITBEKGzRokB8rGlP9HCuby4pEV8p4LCtCUhGCUlHmAQAA65pGtfw7vOJdIqv76KOP0ltvvZU23njj1L179/whxo0bV3V80qRJuY1/7HUL8fzyyy/X6OYYlaMIY507d64aU/0c5THlc8RSx7hW9THRdCRel8fUZi4AAAB1raIVtnPPPTcdcsgheRlkdHqMtvpR7Tr66KNzx5QTTzwxLyls06ZNDmHRtTECUrnJRywtjGB27LHHpmHDhuX9ZBdffHG+X1q5snXKKafk7o/nn39+OuGEE9IjjzySl1xG58iyuMbAgQNTjx49Us+ePdPw4cPT3Llz06BBg/Lx2swFAABgrQps77zzTg5nH374YW6bv9dee6Wnn346fx2uueaa3LExblId3Raju+ONN95Y9f0R7h544IHcFTLC03rrrZeD12WXXVY1Zsstt8zhLO6jdu2116bNNtss3XLLLflcZQMGDMi3AYj7t0Xo69atW275X70RycrmAgAAsFbdh21d4z5sAADAqmSDQu1hAwAA4P8IbAAAAAUlsAEAABSUwAYAAFBQAhsAAEBBCWwAAAAFJbABAAAUlMAGAABQUAIbAABAQQlsAAAABSWwAQAAFJTABgAAUFACGwAAQEEJbAAAAAUlsAEAABSUwAYAAFBQAhsAAEBBCWwAAAAFJbABAAAUlMAGAABQUAIbAABAQQlsAAAABSWwAQAAFJTABgAAUFACGwAAQEEJbAAAAAUlsAEAABSUwAYAAFBQAhsAAEBBCWwAAAAFJbABAAAUlMAGAABQUAIbAABAQQlsAAAABSWwAQAAFJTABgAAUFACGwAAQEEJbAAAAAUlsAEAABSUwAYAAFBQAhsAAEBBCWwAAAAFJbABAAAUVGEC249//ONUr169dPbZZ1e99/HHH6fTTjsttW3bNrVo0SIdccQR6f3336/xfW+//XY66KCDUvPmzVO7du3SeeedlxYvXlxjzKOPPpp22WWX1KRJk7TVVlul2267bbnr33DDDalTp06padOmabfddksTJkyocbw2cwEAAFjrAtuzzz6b/vM//zPttNNONd4/55xz0v3335/uvvvu9Nhjj6V333039e/fv+r4kiVLclhbuHBheuqpp9Ltt9+ew9iQIUOqxkyePDmP2XfffdOLL76YA+FJJ52UHnrooaoxI0aMSIMHD06XXHJJev7551PXrl1Tv3790rRp02o9FwAAgDpXqrA5c+aUtt5669LYsWNLX/nKV0pnnXVWfn/mzJmlRo0ale6+++6qsa+//noppjx+/Pj8etSoUaX69euXpk6dWjXmpptuKrVq1aq0YMGC/Pr8888v7bDDDjWuOWDAgFK/fv2qXvfs2bN02mmnVb1esmRJaZNNNildeeWVtZ5LbcyaNSt/TzxX0sKFC0v33XdffgYAAD5/tc0GDVOFxTLDqID17t07XX755VXvT5w4MS1atCi/X7bddtulzTffPI0fPz7tvvvu+blLly6pffv2VWOiMnbqqaemV199Ne288855TPVzlMeUl15GdS6uddFFF1Udr1+/fv6e+N7azmVFFixYkB9ls2fPzs9xrnhUSvnalZwDAACsyxbV8m/xiga2O++8My9BjCWRy5o6dWpq3Lhxat26dY33I5zFsfKY6mGtfLx87NPGRHiaP39+mjFjRl5auaIxb7zxRq3nsiJXXnllGjp06HLvjxkzJu+5q7SxY8dWegoAALBOmjdvXrED25QpU9JZZ52VQ0M0+lgbRdUu9saVRUjs2LFj6tu3b2rVqlVF03z83Pv06ZMaNWpUsXkAAMC6avb/rr4rbGCLZYbR1CO6N5ZFpevxxx9P119/fW4KEssVZ86cWaOyFZ0ZO3TokL+O52W7OZY7N1Yfs2w3x3gdgalZs2apQYMG+bGiMdXPsbK5rEh0pYzHsiIkFSEoFWUeAACwrmlUy7/DK9Ylcr/99ksvv/xy7txYfvTo0SMdc8wxVV/Hhxg3blzV90yaNCm38e/Vq1d+Hc9xjurdHKNyFGGsc+fOVWOqn6M8pnyOWOrYvXv3GmOWLl2aX5fHxPGVzQUAAKCuVazC1rJly7TjjjvWeG+99dbL9zkrv3/iiSfmJYVt2rTJIeyMM87IAanc5COWFkYwO/bYY9OwYcPyfrKLL744NzIpV7ZOOeWUXLE7//zz0wknnJAeeeSRdNddd6WRI0dWXTeuMXDgwBwSe/bsmYYPH57mzp2bBg0alI+vv/76K50LAABAXat4l8hPc8011+SOjXGT6ui2GN0db7zxxqrjsZTxgQceyF0hIzxF4Ivgddlll1WN2XLLLXM4i/uoXXvttWmzzTZLt9xySz5X2YABA9L06dPz/dsi9HXr1i2NHj26RiOSlc0FAACgrtWL3v51flY+cWNhVOtmzZpV8aYjo0aNSgceeKA9bAAAUOBsULE9bAAAAHw6gQ0AAKCgBDYAAICCEtgAAAAKSmADAAAoKIENAACgoAQ2AACAghLYAAAACkpgAwAAKCiBDQAAoKAENgAAgIIS2AAAAApKYAMAACgogQ0AAKCgBDYAAICCEtgAAAAKSmADAAAoKIENAACgoAQ2AACAghLYAAAACkpgAwAAKCiBDQAAoKAENgAAgIIS2AAAANamwHb77benkSNHVr0+//zzU+vWrdMee+yR/vnPf9bl/AAAANZZqxXYfvSjH6VmzZrlr8ePH59uuOGGNGzYsLThhhumc845p67nCAAAsE5quDrfNGXKlLTVVlvlr++77750xBFHpG9/+9tpzz33TPvss09dzxEAAGCdtFoVthYtWqQPP/wwfz1mzJjUp0+f/HXTpk3T/Pnz63aGAAAA66jVqrBFQDvppJPSzjvvnP7617+mAw88ML//6quvpk6dOtX1HAEAANZJq1Vhiz1rvXr1StOnT0+/+93vUtu2bfP7EydOTEcffXRdzxEAAGCdtFoVtugIef311y/3/tChQ+tiTgAAAKxuhW306NHpySefrFFx69atW/rmN7+ZZsyYUZfzAwAAWGetVmA777zz0uzZs/PXL7/8cvrud7+b97FNnjw5DR48uK7nCAAAsE5arSWREcw6d+6cv449bAcffHC+N9vzzz9f1YAEAACAClTYGjdunObNm5e/fvjhh1Pfvn3z123atKmqvAEAAFCBCttee+2Vlz7GjbInTJiQRowYkd+PFv+bbbbZZ5wSAAAAq11hiw6RDRs2TPfcc0+66aab0qabbprff/DBB9P+++/vJwsAAFCpCtvmm2+eHnjggeXev+aaa+piTgAAAKxuYAtLlixJ9913X3r99dfz6x122CF97WtfSw0aNKjL+QEAAKyzViuwvfnmm7kb5L/+9a+07bbb5veuvPLK1LFjxzRy5Mj0pS99qa7nCQAAsM5ZrT1sZ555Zg5lU6ZMya384/H222+nLbfcMh8DAACgQhW2xx57LD399NO5jX9Z27Zt049//OPcORIAAIAKVdiaNGmS5syZs9z7H330Ub5HGwAAABUKbAcffHD69re/nZ555plUKpXyIypup5xySm48UltxS4CddtoptWrVKj969eqVbw1Q9vHHH6fTTjstV+9atGiRjjjiiPT+++/XOEcsxTzooINS8+bNU7t27dJ5552XFi9eXGPMo48+mnbZZZccNLfaaqt02223LTeXG264IXXq1Ck1bdo07bbbbvn+ctXVZi4AAAAVD2zXXXdd3sMWASsCTjz22GOPHIaGDx9e6/PETbZjGeXEiRPTc889l7761a+mQw89NL366qv5+DnnnJPuv//+dPfdd+dlmO+++27q379/jU6VEdYWLlyYnnrqqXT77bfnMDZkyJCqMZMnT85j9t133/Tiiy+ms88+O5100knpoYceqhoTN/6OG4FfcskleT9e165dU79+/dK0adOqxqxsLgAAAHWtXinKY6spukWW2/pvv/32ObB9VrEv7qc//Wk68sgj00YbbZTuuOOO/HV444038nXGjx+fdt9991yNi2pfhKf27dvnMTfffHO64IIL0vTp0/PyzPg6Ole+8sorVdc46qij0syZM9Po0aPz66io7brrrvmG4GHp0qW54+UZZ5yRLrzwwjRr1qyVzqU2Zs+endZff/18vqgoVsqiRYvSqFGjcqfPRo0aVWweAACwrppdy2xQ66YjUYH6NH/605+qvr766qvTqopqWVSv5s6dmyt3UXWLYNG7d++qMdttt12+aXc5JMVzly5dqsJaiMrYqaeemqt0O++8cx5T/RzlMVFpC1Gdi2tddNFFVcfr16+fvye+N9RmLiuyYMGC/Kj+SwlxrnhUSvnalZwDAACsyxbV8m/xWge2F154oVbj6tWrl1bFyy+/nANa7BGLvWH33ntv6ty5c16+GBWy1q1b1xgf4Wzq1Kn563iuHtbKx8vHPm1MhKf58+enGTNm5LC4ojFRRSufY2VzWZG4N93QoUOXe3/MmDF5z12ljR07ttJTAACAddK8efPqNrBVr6DVpbjxdoSzKAXec889aeDAgXmP2NogqnbVK5MREmOpZd++fSu+JDLCWp8+fSyJBACACiivvlsj92GrS1G5Ku996969e3r22WfTtddemwYMGJCXK8Zes+qVrejM2KFDh/x1PC/bzbHcubH6mGW7OcbrCEzNmjVLDRo0yI8Vjal+jpXNZUWiK2U8lhUhqQhBqSjzAACAdU2jWv4dvlpdItekaPgR+74ivMWHGDduXNWxSZMm5Tb+sYQyxHMsqazezTEqRxHGYllleUz1c5THlM8RgTGuVX1MzCFel8fUZi4AAAB1rWGllwwecMABuXlH3Ig7ujDGPdOi5X50TDnxxBPzksLoHBkhLLo2RkAqN/mIpYURzI499tg0bNiwvJ/s4osvzvdLK1e24t5w0f3x/PPPTyeccEJ65JFH0l133ZU7R5bFNWIpZo8ePVLPnj3zrQmi+cmgQYPy8drMBQAAoK5VNLBFZey4445L7733Xg5FcRPtCGuxtypcc801uWNj3KQ6qm7R3fHGG2+s+v5YyvjAAw/krpARntZbb70cvC677LKqMVtuuWUOZ3EftVhqGfd+u+WWW/K5ymL5ZdwGIO7fFqGvW7duueV/9UYkK5sLAABAoe7DxqpxHzYAAGBVskHh9rABAADwPwQ2AACAghLYAAAACkpgAwAAKCiBDQAAoKAENgAAgIIS2AAAAApKYAMAACgogQ0AAKCgBDYAAICCEtgAAAAKSmADAAAoKIENAACgoAQ2AACAghLYAAAACkpgAwAAKCiBDQAAoKAENgAAgIIS2AAAAApKYAMAACgogQ0AAKCgBDYAAICCEtgAAAAKSmADAAAoKIENAACgoAQ2AACAghLYAAAACkpgAwAAKCiBDQAAoKAENgAAgIIS2AAAAApKYAMAACgogQ0AAKCgBDYAAICCEtgAAAAKSmADAAAoKIENAACgoAQ2AACAghLYAAAACkpgAwAAKCiBDQAAoKAENgAAgIIS2AAAAAqqooHtyiuvTLvuumtq2bJlateuXTrssMPSpEmTaoz5+OOP02mnnZbatm2bWrRokY444oj0/vvv1xjz9ttvp4MOOig1b948n+e8885LixcvrjHm0UcfTbvssktq0qRJ2mqrrdJtt9223HxuuOGG1KlTp9S0adO02267pQkTJqzyXAAAANaKwPbYY4/lAPT000+nsWPHpkWLFqW+ffumuXPnVo0555xz0v3335/uvvvuPP7dd99N/fv3rzq+ZMmSHNYWLlyYnnrqqXT77bfnMDZkyJCqMZMnT85j9t133/Tiiy+ms88+O5100knpoYceqhozYsSINHjw4HTJJZek559/PnXt2jX169cvTZs2rdZzAQAAqEv1SqVSKRXE9OnTc4UswtDee++dZs2alTbaaKN0xx13pCOPPDKPeeONN9L222+fxo8fn3bffff04IMPpoMPPjiHp/bt2+cxN998c7rgggvy+Ro3bpy/HjlyZHrllVeqrnXUUUelmTNnptGjR+fXUVGLat/111+fXy9dujR17NgxnXHGGenCCy+s1VxWZvbs2Wn99dfP52rVqlWqlAjGo0aNSgceeGBq1KhRxeYBAADrqtm1zAYNU4HEZEObNm3y88SJE3O46N27d9WY7bbbLm2++eZVISmeu3TpUhXWQlTGTj311PTqq6+mnXfeOY+pfo7ymKi0hajOxbUuuuiiquP169fP3xPfW9u5LGvBggX5Uf2XEuI88aiU8rUrOQcAAFiXLarl3+KFCWxR0YoAteeee6Ydd9wxvzd16tRcIWvdunWNsRHO4lh5TPWwVj5ePvZpYyJAzZ8/P82YMSMvrVzRmKii1XYuK9qjN3To0OXeHzNmTN5vV2mxDBUAAPj8zZs374sV2GIvWyxZfPLJJ9PaIip2sS+uLAJiLLOMfXqVXhIZYa1Pnz6WRAIAQAWUV999IQLb6aefnh544IH0+OOPp80226zq/Q4dOuTlirHXrHplKzozxrHymGW7OZY7N1Yfs2w3x3gdoalZs2apQYMG+bGiMdXPsbK5LCs6UsZjWRGSihCUijIPAABY1zSq5d/hFe0SGf1OIqzde++96ZFHHklbbrlljePdu3fPH2TcuHFV70Xb/2jj36tXr/w6nl9++eUa3RyjehRhrHPnzlVjqp+jPKZ8jljqGNeqPiaWaMbr8pjazAUAAKAuNaz0MsjouviHP/wh34utvBcsuqVE5SueTzzxxLysMBqRRAiLro0RkMpNPmJ5YQSzY489Ng0bNiyf4+KLL87nLle3TjnllNz98fzzz08nnHBCDod33XVX7hxZFtcYOHBg6tGjR+rZs2caPnx4vr3AoEGDqua0srkAAACsNYHtpptuys/77LNPjfd/+ctfpuOPPz5/fc011+SOjXGT6ui4GN0db7zxxqqxsZQxllNGV8gIT+utt14OXpdddlnVmKjcRTiL+6hde+21ednlLbfcks9VNmDAgHwbgLh/W4S+bt265Zb/1RuRrGwuAAAAa+192NZ27sMGAACsSjao6B42AAAAPpnABgAAUFACGwAAQEEJbAAAAAUlsAEAABSUwAYAAFBQAhsAAEBBCWwAAAAFJbABAAAUlMAGAABQUAIbAABAQQlsAAAABSWwAQAAFJTABgAAUFACGwAAQEEJbAAAAAUlsAEAABSUwAYAAFBQAhsAAEBBCWwAAAAFJbABAAAUlMAGAABQUAIbAABAQQlsAAAABSWwAQAAFJTABgAAUFACGwAAQEEJbAAAAAUlsAEAABSUwAYAAFBQAhsAAEBBCWwAAAAFJbABAAAUlMAGAABQUAIbAABAQQlsAAAABSWwAQAAFJTABgAAUFACGwAAQEEJbAAAAAUlsAEAABSUwAYAAFBQAhsAAEBBVTSwPf744+mQQw5Jm2yySapXr1667777ahwvlUppyJAhaeONN07NmjVLvXv3Tn/7299qjPn3v/+djjnmmNSqVavUunXrdOKJJ6aPPvqoxpiXXnopffnLX05NmzZNHTt2TMOGDVtuLnfffXfabrvt8pguXbqkUaNGrfJcAAAA1prANnfu3NS1a9d0ww03rPB4BKvrrrsu3XzzzemZZ55J6623XurXr1/6+OOPq8ZEWHv11VfT2LFj0wMPPJBD4Le//e2q47Nnz059+/ZNW2yxRZo4cWL66U9/mi699NL0i1/8omrMU089lY4++ugc9l544YV02GGH5ccrr7yySnMBAACoS/VKUToqgKiw3XvvvTkohZhWVN6++93vpnPPPTe/N2vWrNS+fft02223paOOOiq9/vrrqXPnzunZZ59NPXr0yGNGjx6dDjzwwPTOO+/k77/pppvS97///TR16tTUuHHjPObCCy/M1bw33ngjvx4wYEAOjxH4ynbffffUrVu3HNBqM5cVWbBgQX5UD49R4fvggw9yRbBSFi1alANunz59UqNGjSo2DwAAWFfNnj07bbjhhjlXfFo2aJgKavLkyTlkxdLDsvXXXz/ttttuafz48TkkxXMsgyyHtRDj69evn6tghx9+eB6z9957V4W1EJWxn/zkJ2nGjBlpgw02yGMGDx5c4/oxprxEszZzWZErr7wyDR06dLn3x4wZk5o3b54qLUIbAADw+Zs3b16txhU2sEVAClHFqi5el4/Fc7t27Wocb9iw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ft2rV6+q9772ta+lO+64I5100knpzjvvrNBsAQCAFbEkci0WLf0HDhyYevTokXr27JmGDx+e5s6dm7tGVnf44YenX//61+nYY49NDRs2TEceeWTF5gwAAPwfgW0tNmDAgDR9+vQ0ZMiQNHXq1NStW7c0evTo5RqRhAhpUYGL0BbdJPv371+ROQMAAP+nXil6ugMAAFA49rABAAAUlMAGAABQUAIbAABAQQlsAAAABSWwAQAAFJTABgAAUFACGwAAQEEJbAAAAAUlsAEAABSUwAYAa8Dxxx+fDjvssEpPA4AvOIENAACgoAQ2APgM7rnnntSlS5fUrFmz1LZt29S7d+903nnnpdtvvz394Q9/SPXq1cuPRx99NI+fMmVK+sY3vpFat26d2rRpkw499ND0j3/8Y7nK3NChQ9NGG22UWrVqlU455ZS0cOHCCn5KACqlYcWuDABfcO+99146+uij07Bhw9Lhhx+e5syZk5544ol03HHHpbfffjvNnj07/fKXv8xjI5wtWrQo9evXL/Xq1SuPa9iwYbr88svT/vvvn1566aXUuHHjPHbcuHGpadOmOeRFmBs0aFAOg1dccUWFPzEAnzeBDQA+Q2BbvHhx6t+/f9piiy3ye1FtC1FxW7BgQerQoUPV+P/+7/9OS5cuTbfcckuuuoUIdFFti3DWt2/f/F4Et1tvvTU1b9487bDDDumyyy7LVbsf/vCHqX59i2MA1iX+Xx8AVlPXrl3Tfvvtl0Pa17/+9fRf//VfacaMGZ84/i9/+Ut68803U8uWLVOLFi3yIypvH3/8cXrrrbdqnDfCWllU5D766KO8nBKAdYsKGwCspgYNGqSxY8emp556Ko0ZMyb9/Oc/T9///vfTM888s8LxEbq6d++efvOb3yx3LParAcCyBDYA+AxiaeOee+6ZH0OGDMlLI++99968rHHJkiU1xu6yyy5pxIgRqV27drmZyKdV4ubPn5+XVYann346V+M6duy4xj8PAMViSSQArKaopP3oRz9Kzz33XG4y8vvf/z5Nnz49bb/99qlTp065kcikSZPSBx98kBuOHHPMMWnDDTfMnSGj6cjkyZPz3rUzzzwzvfPOO1XnjY6QJ554YnrttdfSqFGj0iWXXJJOP/10+9cA1kEqbACwmqJK9vjjj6fhw4fnjpBRXbvqqqvSAQcckHr06JHDWDzHUsg//elPaZ999snjL7jggtyoJLpKbrrppnkfXPWKW7zeeuut0957750bl0QnyksvvbSinxWAyqhXKpVKFbo2ALCMuA/bzJkz03333VfpqQBQANZWAAAAFJTABgAAUFCWRAIAABSUChsAAEBBCWwAAAAFJbABAAAUlMAGAABQUAIbAABAQQlsAAAABSWwAQAAFJTABgAAkIrp/wNYd8i5YpVkWQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 1000x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "尝试学习率: 0.001\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "91deebed94f24ec189d4ee92232cd9e5",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "train progress:   0%|          | 0/41300 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "早停触发! 最佳验证准确率(如果是回归，这里是损失): -0.3212\n",
      "早停: 已有10轮验证损失没有改善！\n",
      "学习率 0.001 的验证损失: 0.7200\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0EAAAHWCAYAAACxAYILAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAALDRJREFUeJzt3QuUlmW5N/BrhGEAARFRQUUxz+D51ELapiniAY+lZZaH0rblISXddjTRlGqXm0qzg6lloRYKujUUMEFNUdTKQ3nAUMkoxJThoIDwfuu+v2/m46RCAs8w9++31tPM+7wP817vjKv1/td139dTV6vVagEAAFCIdaouAAAAYE0SggAAgKIIQQAAQFGEIAAAoChCEAAAUBQhCAAAKIoQBAAAFEUIAgAAiiIEAQAARRGCAFjCddddF3V1dfHCCy9UXQoArBZCEAAAUBQhCAAAKIoQBAARMWfOnKpLAGANEYIAWCE//OEPo2/fvtHQ0BCbbLJJnHHGGfH6668vcc1zzz0XH/7wh6NHjx7Rvn372GyzzeJjH/tYzJw5s/masWPHxgc+8IHo2rVrdOrUKbbbbrv48pe/vEI1/PKXv4y99947OnbsGOuvv37su+++MWbMmObn016miy66aJl/17t37zj55JOX2fc0YcKE+NznPhcbbbRRrnXEiBHN55f24x//OD/35JNPNp97+umn4yMf+Uh069Ytv98999wzbrvttiX+3YIFC2LIkCGxzTbb5Gs22GCD/P7T7wGAarSt6HUBWIukYJE+yB944IHx2c9+Np555pm46qqrYtKkSfH73/8+6uvrY/78+TFw4MCYN29enHXWWTkIvfzyy3H77bfnsLTeeuvFU089FYMGDYqdd945Lr744hyoJk+enH/Gu0mvn+rYZ5998r9t165dPPTQQ/G73/0uDjrooH/rfaUAtOGGG8aFF16YO0GHHXZYDma//vWv44Mf/OAS19500005BO644475cXov/fv3j0033TS++MUvxrrrrpv/3VFHHRU333xzHH300c2/u6FDh8app56aA1xjY2M88sgj8dhjj8WAAQP+rboBeG+EIADe0SuvvJI/xKegMXr06Fhnnf+7iGD77bePM888M3dnTjnllPjzn/8cU6ZMid/85je5O9IkBYwmqfuRwlL6Od27d1/hGlJQSsEnBYvUrWmqIanVav/2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CAAAWrnevXvHsGHDVsnPGj9+fB4u8frrr8faymAEAABogfbbb7/YddddV0l4mTRpUqy77rqrpK7WQAgCAIC1dGx0uvlruoHou9lwww3XSE1rC8vhAAAoLjzMnf/WGj/S666ok08+OSZMmBDf+9738tKzdFx33XX56+jRo2OPPfaIhoaGuP/+++P555+PI488MjbeeOPo1KlT7LXXXjFu3Lh3XA5XV1cXV199dRx99NF5dHi6785tt932b/9Ob7755ujbt2+uKb3Wd7/73SWe/+EPf5hfI421TnV+5CMfaX5uxIgRsdNOO+UR2BtssEEceOCBMWfOnFiddIIAACjKGwsWRp8L71rjr/vniwdGx3Yr9vE7hZ9nn302dtxxx7j44ovzuaeeeip//eIXvxjf+c534n3ve1+sv/76MXXq1Dj00EPj0ksvzSHkF7/4RRx++OHxzDPPxOabb/62rzFkyJD49re/Hf/93/8dP/jBD+KEE07I9+Dp1q3bSr2vRx99NI477ri46KKL4qMf/Wg88MAD8bnPfS4HmhTmHnnkkTj77LPj+uuvj3322Sf+9a9/xX333Zf/7bRp0+L444/PdaRANmvWrPzcygTGf4cQBAAALcx6660X7dq1y12aHj165HNPP/10/ppC0YABA5qvTaFll112aX58ySWXxMiRI3Nn58wzz3zb1zj55JNzAEkuu+yy+P73vx8PP/xwHHzwwStV6+WXXx4HHHBAfO1rX8uPt9122/jzn/+cw1V6jZdeeinvRxo0aFB07tw5tthii9htt92aQ9Bbb70VxxxzTD6fpK7Q6iYEAQBQlA71bXJXporXXRX23HPPJR7Pnj07d2HuuOOO5lDxxhtv5PDxTnbeeefm71NI6dKlS0yfPn2l6/nLX/6Sl+Mtrn///nn5XdqzlAJbCjipc5UCVjqaluGl8JYCVAo+AwcOjIMOOigvlUsdrtXJniAAAIqS9sOkZWlr+kivuyosPeXtvPPOy52f1M1JS8n++Mc/5lAxf/78d/w59fX1y/xeFi1aFKta6v489thjccMNN0TPnj3jwgsvzOEnjdhu06ZNjB07Nu9z6tOnT16Wt91228WUKVNidRKCAACgBUrL4VIn5d38/ve/z8vOUnclhZ+0fO6FF16INWWHHXbINSxdU1oWl0JOkibYpYEHae/P448/nuv73e9+1xy+Uuco7VH6wx/+kN93CnWrk+VwAADQAqUpaw899FAODGnq29t1adLUtVtuuSUPQ0iBIu3NWR0dnbfzhS98IU+kS3uR0mCEBx98MK644oo8ES65/fbb469//Wvsu+++eZnbb3/721xf6vik93f33XfnZXAbbbRRfvzKK6/kYLU66QQBAEALlJa5pU5KWiaW7vPzdnt80mCCFC7S5LUUhNLemt13332N1bn77rvHr3/967jxxhvzNLu03C0Nb0jdqaRr1645pH3oQx/K4eZHP/pRXhqXRmqnfUj33ntvnm6XOkdf/epX83jtQw45ZLXWXFdb3fPnVqPGxsY8OWPmzJn5F1iVBQsW5ESb/nhLr60EAKA6b775Zt5fsuWWW+Z71LB2e6e/58pkA50gAACgKEIQAADQ7PTTT897kJZ3pOdaA4MRAACAZmk/T9qPtDxVbkFZlYQgAACgWZrSlo7WzHI4AACgKEIQAABQFCEIAAAoihAEAAAURQgCAACKIgQBAEAr1Lt37xg2bNgKXVtXVxejRo2KUghBAABAUYQgAACgKEIQAABlqdUi5s9Z80d63RX0k5/8JDbZZJNYtGjREuePPPLI+NSnPhXPP/98/n7jjTeOTp06xV577RXjxo1bZb+iJ554Ij70oQ9Fhw4dYoMNNojPfOYzMXv27Obnx48fH3vvvXesu+660bVr1+jfv3+8+OKL+bk//elPsf/++0fnzp2jS5cusccee8QjjzwSLUnbqgsAAIA1asHciMs2WfOv++W/R7Rbd4UuPfbYY+Oss86Ke+65Jw444IB87l//+lfceeed8dvf/jYHkkMPPTQuvfTSaGhoiF/84hdx+OGHxzPPPBObb775eypzzpw5MXDgwOjXr19MmjQppk+fHqeeemqceeaZcd1118Vbb70VRx11VJx22mlxww03xPz58+Phhx/O+4qSE044IXbbbbe46qqrok2bNvHHP/4x6uvroyURggAAoIVZf/3145BDDonhw4c3h6ARI0ZE9+7dc5dlnXXWiV122aX5+ksuuSRGjhwZt912Ww4r78Xw4cPjzTffzMEqdXqSK664Ioesb33rWznQzJw5MwYNGhRbbbVVfn6HHXZo/vcvvfRSnH/++bH99tvnx9tss020NEIQAABlqe/4f7syVbzuSkgdldRt+eEPf5i7Pb/61a/iYx/7WA5AqRN00UUXxR133BHTpk3L3Zk33ngjB5D36i9/+UsOWE0BKEnL3dLSvNRp2nfffePkk0/O3aIBAwbEgQceGMcdd1z07NkzXzt48ODcObr++uvzc6mr1RSWWgp7ggAAKEtatpWWpa3p4/8tF1tRqfNSq9Vy0Jk6dWrcd999ORgl5513Xu78XHbZZfl8WnK200475aVpa8K1114bDz74YOyzzz5x0003xbbbbhsTJ07Mz6Vw9tRTT8Vhhx0Wv/vd76JPnz651pZECAIAgBaoffv2ccwxx+QOUNp7s91228Xuu++en/v973+fuzFHH310Dj89evSIF154YZW87g477JCHG6S9QU3S66UOVKqhSdr386UvfSkeeOCB2HHHHfMyuiYpFJ177rkxZsyY/B5SaGpJhCAAAGihUucndYKuueaa5i5Q0z6bW265JXeAUmD5+Mc/vswkuffymu3bt4+TTjopnnzyyTycIQ1p+OQnP5mn0U2ZMiWHn9QJShPhUtB57rnncnhKS/LSnqQ0PS49l8JTGq6w+J6hlsCeIAAAaKHSmOpu3brlvTgp6DS5/PLL86jstBwtDUu44IILorGxcZW8ZseOHeOuu+6Kz3/+83n0dnr84Q9/OL9m0/NPP/10/PznP49XX3017wU644wz4j//8z/z3qR07sQTT4x//vOfubbUCRoyZEi0JHW1tNBwLZX+0Outt16eTpFmkFdlwYIFeVRhGlPY0sb/AQCULE05S52LLbfcMnc3WLu9099zZbKB5XAAAEBRhCAAAGjF0mCFTp06Lffo27dvlMieIAAAaMWOOOKIeP/737/c5+oL3cohBAEAQCvWuXPnfPD/WQ4HAECrtxbPAmM1/B2FIAAAWq2m5V5z586tuhRWgaa/43tdxmc5HAAArVabNm2ia9euMX369OZ73NTV1VVdFv9GBygFoPR3TH/P9Hd9L4QgAABatR49euSvTUGItVcKQE1/z/dCCAIAoFVLnZ+ePXvGRhttlG9yz9opLYF7rx2gFhOCXn755bjgggti9OjRucW19dZbx7XXXht77rln1aUBANCKpA/Qq+pDNGu3SkPQa6+9Fv3794/9998/h6ANN9wwnnvuuVh//fWrLAsAAGjFKg1B3/rWt6JXr16589Nkyy23rLIkAACglas0BN12220xcODAOPbYY2PChAmx6aabxuc+97k47bTTlnv9vHnz8tGksbExf01rO6tc39n02taYAgBANVbms3ilIeivf/1rXHXVVTF48OD48pe/HJMmTYqzzz472rVrFyeddNIy1w8dOjSGDBmyzPkxY8bkcYdVGzt2bNUlAABAkeauxL2g6moV3j43hZ00AOGBBx5oPpdCUApDDz744Ap1gtJyuhkzZkSXLl2iytSZAtCAAQPe842bAACAlZeyQffu3WPmzJnvmg0q7QSlUYV9+vRZ4twOO+wQN99883Kvb2hoyMfSUvBoCeGjpdQBAAClqV+Jz+HrRIXSZLhnnnlmiXPPPvtsbLHFFpXVBAAAtG6VhqBzzz03Jk6cGJdddllMnjw5hg8fHj/5yU/ijDPOqLIsAACgFas0BO21114xcuTIuOGGG2LHHXeMSy65JIYNGxYnnHBClWUBAACtWKV7gpJBgwblAwAAoNV3ggAAANY0IQgAACiKEAQAABRFCAIAAIoiBAEAAEURggAAgKIIQQAAQFGEIAAAoChCEAAAUBQhCAAAKIoQBAAAFEUIAgAAiiIEAQAARRGCAACAoghBAABAUYQgAACgKEIQAABQFCEIAAAoihAEAAAURQgCAACKIgQBAABFEYIAAICiCEEAAEBRhCAAAKAoQhAAAFAUIQgAACiKEAQAABRFCAIAAIoiBAEAAEURggAAgKIIQQAAQFGEIAAAoChCEAAAUBQhCAAAKIoQBAAAFEUIAgAAiiIEAQAARRGCAACAoghBAABAUYQgAACgKEIQAABQFCEIAAAoihAEAAAURQgCAACKIgQBAABFEYIAAICiCEEAAEBRhCAAAKAolYagiy66KOrq6pY4tt9++ypLAgAAWrm2VRfQt2/fGDduXPPjtm0rLwkAAGjFKk8cKfT06NGj6jIAAIBCVB6Cnnvuudhkk02iffv20a9fvxg6dGhsvvnmy7123rx5+WjS2NiYvy5YsCAfVWl67SprAACAki1Yic/idbVarRYVGT16dMyePTu22267mDZtWgwZMiRefvnlePLJJ6Nz587L3UOUrlna8OHDo2PHjmuoagAAoKWZO3dufPzjH4+ZM2dGly5dWm4IWtrrr78eW2yxRVx++eXx6U9/eoU6Qb169YoZM2a86xtd3alz7NixMWDAgKivr6+sDgAAKFVjY2N07959hUJQ5cvhFte1a9fYdtttY/Lkyct9vqGhIR9LS8GjJYSPllIHAACUpn4lPoe3qPsEpaVxzz//fPTs2bPqUgAAgFaq0hB03nnnxYQJE+KFF16IBx54II4++uho06ZNHH/88VWWBQAAtGKVLof729/+lgPPq6++GhtuuGF84AMfiIkTJ+bvAQAAWl0IuvHGG6t8eQAAoEAtak8QAADA6iYEAQAARRGCAACAoghBAABAUYQgAACgKEIQAABQFCEIAAAoihAEAAAURQgCAACKIgQBAABFEYIAAICiCEEAAEBRhCAAAKAoQhAAAFAUIQgAACiKEAQAABRFCAIAAIoiBAEAAEURggAAgKIIQQAAQFGEIAAAoChCEAAAUBQhCAAAKIoQBAAAFEUIAgAAiiIEAQAARRGCAACAoghBAABAUYQgAACgKEIQAABQFCEIAAAoihAEAAAURQgCAACKIgQBAABFEYIAAICiCEEAAEBRhCAAAKAoQhAAAFAUIQgAACiKEAQAABRFCAIAAIoiBAEAAEURggAAgKIIQQAAQFGEIAAAoChCEAAAUBQhCAAAKEqLCUHf/OY3o66uLs4555yqSwEAAFqxFhGCJk2aFD/+8Y9j5513rroUAACglas8BM2ePTtOOOGE+OlPfxrrr79+1eUAAACtXNuqCzjjjDPisMMOiwMPPDC+8Y1vvOO18+bNy0eTxsbG/HXBggX5qErTa1dZAwAAlGzBSnwWrzQE3XjjjfHYY4/l5XArYujQoTFkyJBlzo8ZMyY6duwYVRs7dmzVJQAAQJHmzp27wtfW1Wq1WlRg6tSpseeee+bg0LQXaL/99otdd901hg0btsKdoF69esWMGTOiS5cuUWXqTO9jwIABUV9fX1kdAABQqsbGxujevXvMnDnzXbNBZZ2gRx99NKZPnx67775787mFCxfGvffeG1dccUUOO23atFni3zQ0NORjaSl4tITw0VLqAACA0tSvxOfwykLQAQccEE888cQS50455ZTYfvvt44ILLlgmAAEAAKwKlYWgzp07x4477rjEuXXXXTc22GCDZc4DAAC0mhHZAAAARY3IXtz48eOrLgEAAGjl/q1O0M9//vO44447mh//13/9V3Tt2jX22WefePHFF1dlfQAAANWHoMsuuyw6dOiQv3/wwQfjyiuvjG9/+9t5JN255567aisEAACoejlcusfP1ltvnb8fNWpUfPjDH47PfOYz0b9//3yv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rqO+vr7SWgAAoESN/y8TNGWEVhuCZs2alb/26tWr6lIAAIAWkhHWW2+9d7ymrrYiUamFWrRoUfz973+Pzp07R11dXaWpMwWxqVOnRpcuXSqrAwAASlWr1XIA2mSTTWKdddZpvSGopUghKKXNmTNnCkEAANDCGYwAAAAURQgCAACKIgStAg0NDfH1r389fwUAAFo2e4IAAICi6AQBAABFEYIAAICiCEEAAEBRhKBVKN2wddSoUVWXAQAAvAMhaCVdeeWV0bt372jfvn28//3vj4cffrjqkgAAgJUgBK2Em266KQYPHpzHYT/22GOxyy67xMCBA2P69OlVlwYAAKwgIWglXH755XHaaafFKaecEn369Ikf/ehH0bFjx7jmmmuWe30KSz179ozHH398jdcKAAAsnxC0gubPnx+PPvpoHHjggc3n1llnnfz4wQcfXOLadOuls846K37xi1/EfffdFzvvvHMFFQMAAMvTdrlnWcaMGTNi4cKFsfHGGy9xPj1++umnmx+/9dZb8YlPfCL+8Ic/xP333x+bbrppBdUCAABvRwhaxc4999xoaGiIiRMnRvfu3asuBwAAWIrlcCsoBZo2bdrEP//5zyXOp8c9evRofjxgwIB4+eWX46677qqgSgAA4N0IQSuoXbt2sccee8Tdd9/dfG7RokX5cb9+/ZrPHXHEETF8+PA49dRT48Ybb6yoWgAA4O1YDrcS0njsk046Kfbcc8/Ye++9Y9iwYTFnzpw8LW5xRx99dFx//fXxyU9+Mtq2bRsf+chHKqsZAABYkhC0Ej760Y/GK6+8EhdeeGH84x//iF133TXuvPPOZYYlJCn4pE5RCkJpitwxxxxTSc0AAMCS6mppnjMAAEAh7AkCAACKIgQBAABFEYIAAICiCEEAAEBRhCAAAKAoQhAAAFAUIQgAACiKEAQAABRFCAIAAIoiBAGwVjj55JPjqKOOqroMAFoBIQgAACiKEARAizJixIjYaaedokOHDrHBBhvEgQceGOeff378/Oc/j1tvvTXq6uryMX78+Hz91KlT47jjjouuXbtGt27d4sgjj4wXXnhhmQ7SkCFDYsMNN4wuXbrE6aefHvPnz6/wXQJQpbaVvjoALGbatGlx/PHHx7e//e04+uijY9asWXHffffFiSeeGC+99FI0NjbGtddem69NgWfBggUxcODA6NevX76ubdu28Y1vfCMOPvjgePzxx6Ndu3b52rvvvjvat2+fg1MKSKecckoOWJdeemnF7xiAKghBALSoEPTWW2/FMcccE1tssUU+l7pCSeoMzZs3L3r06NF8/S9/+ctYtGhRXH311bk7lKSQlLpCKfAcdNBB+VwKQ9dcc0107Ngx+vbtGxdffHHuLl1yySWxzjoWRQCUxv/zA9Bi7LLLLnHAAQfk4HPsscfGT3/603jttdfe9vo//elPMXny5OjcuXN06tQpH6lD9Oabb8bzzz+/xM9NAahJ6hzNnj07L6UDoDw6QQC0GG3atImxY8fGAw88EGPGjIkf/OAH8ZWvfCUeeuih5V6fgswee+wRv/rVr5Z5Lu3/AYDlEYIAaFHSsrb+/fvn48ILL8zL4kaOHJmXtC1cuHCJa3ffffe46aabYqONNsoDD96pY/TGG2/kJXXJxIkTc9eoV69eq/39ANDyWA4HQIuROj6XXXZZPPLII3kQwi233BKvvPJK7LDDDtG7d+887OCZZ56JGTNm5KEIJ5xwQnTv3j1PhEuDEaZMmZL3Ap199tnxt7/9rfnnpklwn/70p+PPf/5z/Pa3v42vf/3rceaZZ9oPBFAonSAAWozUzbn33ntj2LBheRJc6gJ997vfjUMOOST23HPPHHDS17QM7p577on99tsvX3/BBRfkYQppmtymm26a9xUt3hlKj7fZZpvYd99983CFNIHuoosuqvS9AlCdulqtVqvw9QFgtUr3CXr99ddj1KhRVZcCQAthHQAAAFAUIQgAACiK5XAAAEBRdIIAAICiCEEAAEBRhCAAAKAoQhAAAFAUIQgAACiKEAQAABRFCAIAAIoiBAEAAFGS/wMxslqR2FIX6QAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 1000x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "网格搜索完成！最佳学习率: 0.01, 最佳验证损失: 0.3235\n"
     ]
    }
   ],
   "source": [
    "# 定义回归模型训练函数\n",
    "\n",
    "\n",
    "\n",
    "# 定义网格搜索函数进行超参数调优\n",
    "learning_rates = [1e-2, 3e-2, 3e-1, 1e-3]  # 学习率列表\n",
    "best_val_loss = float('inf')\n",
    "best_model = None\n",
    "best_lr = None\n",
    "best_record_dict = None\n",
    "\n",
    "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n",
    "early_stopping = EarlyStopping(patience=10, verbose=True)\n",
    "model_saver = ModelSaver(save_dir='model_weights')\n",
    "\n",
    "print(\"开始网格搜索最佳学习率...\")\n",
    "for lr in learning_rates:\n",
    "    print(f\"\\n尝试学习率: {lr}\")\n",
    "    # 为每个学习率重新初始化模型\n",
    "    model = RegressionModel(input_dim)\n",
    "    # 使用当前学习率初始化优化器\n",
    "    optimizer = optim.Adam(model.parameters(), lr=lr)\n",
    "    \n",
    "    # 训练模型\n",
    "    current_model, record_dict = train_regression_model(\n",
    "        model=model,\n",
    "        train_loader=train_loader,\n",
    "        val_loader=val_loader,\n",
    "        criterion=criterion,\n",
    "        optimizer=optimizer,\n",
    "        num_epochs=100,\n",
    "        print_every=10,\n",
    "        eval_step=500,\n",
    "        early_stopping=early_stopping,\n",
    "        model_saver=model_saver,\n",
    "        device=device\n",
    "    )\n",
    "    \n",
    "    # 获取最后一个验证损失\n",
    "    last_val_loss = record_dict[\"val\"][-1][\"loss\"]\n",
    "    print(f\"学习率 {lr} 的验证损失: {last_val_loss:.4f}\")\n",
    "    \n",
    "    # 画出当前学习率的学习曲线\n",
    "    plot_learning_loss_curves(record_dict, sample_step=500)\n",
    "    \n",
    "    # 保存最佳模型\n",
    "    if last_val_loss < best_val_loss:\n",
    "        best_val_loss = last_val_loss\n",
    "        best_model = current_model # 保存最佳模型\n",
    "        best_lr = lr # 保存最佳学习率\n",
    "        best_record_dict = record_dict # 保存最佳记录\n",
    "\n",
    "print(f\"\\n网格搜索完成！最佳学习率: {best_lr}, 最佳验证损失: {best_val_loss:.4f}\")\n",
    "# 将最佳模型赋值给model变量以便后续使用\n",
    "model = best_model\n",
    "record_dict = best_record_dict\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-26T06:15:20.412545Z",
     "start_time": "2025-06-26T06:15:20.356836Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "测试集上的损失为0.3061\n"
     ]
    }
   ],
   "source": [
    "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n",
    "test_loss=evaluate_regression_model(model,test_loader,device,criterion)\n",
    "print(f\"测试集上的损失为{test_loss:.4f}\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
